﻿       IDENTIFICATION DIVISION.
       PROGRAM-ID. TP1_B.

       ENVIRONMENT DIVISION.
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
           DECIMAL-POINT IS COMMA.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
       SELECT ARCH_ALQUILERES      ASSIGN TO DISK
                                   ORGANIZATION IS LINE SEQUENTIAL
                                   FILE STATUS IS ALQUILERES_ESTADO.
       
       SELECT ARCH_LISTADO         ASSIGN TO DISK
                                   ORGANIZATION IS LINE SEQUENTIAL
                                   FILE STATUS IS LISTADO_ESTADO.
       
       SELECT ARCH_AUTOS           ASSIGN TO DISK
                                   ORGANIZATION IS LINE SEQUENTIAL
                                   FILE STATUS IS AUTOS_ESTADO.
              
       DATA DIVISION.
       FILE SECTION.
       FD ARCH_ALQUILERES LABEL RECORD IS STANDARD
                          VALUE OF FILE-ID IS "..\ALQUILERES.TXT".
       01 REG_ALQUILERES.
           03 ALQ_PATENTE  PIC X(6).
           03 ALQ_FECHA.
               05 ALQ_FECHA_ANO PIC 9(4).
               05 ALQ_FECHA_MES PIC 9(2).
               05 ALQ_FECHA_DIA PIC 9(2).
           03 ALQ_TIPO-DOC PIC X.
           03 ALQ_NRO-DOC  PIC X(20).
           03 ALQ_IMPORTE  PIC 9(4)V99.
       
           
       FD ARCH_LISTADO LABEL RECORD IS OMITTED
                       VALUE OF FILE-ID IS "..\LISTADO.TXT".
       01 LINEA_LISTADO   PIC X(80).
       
       FD ARCH_AUTOS          LABEL RECORD IS STANDARD
                              VALUE OF FILE-ID IS "..\AUTOS.TXT".
       01 REG_AUTO.
           03 AUT_PATENTE PIC X(6).
           03 AUT_DESC    PIC X(30).
           03 AUT_MARCA   PIC X(20).
           03 AUT_COLOR   PIC X(10).
           03 AUT_TAMAÑO  PIC X.
           03 AUT_IMPORTE PIC 9(4)V99.
       
       
       WORKING-STORAGE SECTION.
      *VARIABLES PARA CONTROLAR LOS ARCHIVOS.
       01 ALQUILERES_ESTADO PIC XX.
           88  OK_ALQUILERES  VALUE '00'.
           88  EOF_ALQUILERES VALUE '10'.
       01 AUTOS_ESTADO      PIC XX.
           88  OK_AUTOS     VALUE '00'.
           88  EOF_AUTOS    VALUE '10'.
       01 LISTADO_ESTADO    PIC XX.
           88  OK_LISTADO   VALUE '00'.
           88  EOF_LISTADO  VALUE '10'.
      *VARIABLE TOMA FECHA
       01 WX-FECHA          PIC 9(6).
      *VARIABLES DEL PROGRAMA.
       01 NUMERO_HOJA       PIC 99.
       01 CANTIDAD_LINEAS   PIC 999.
       01 I                 PIC 999.
       01 SUB_TABLA_AUTOS   PIC 999.
       01 CANTIDAD_MARCAS   PIC 999.
      *TABLAS.
       01 TABLA_AUTOS.
           03 DATOS_AUTO OCCURS 300 TIMES
           INDEXED BY  IND_AUTOS.
               05 T_AUT_PATENTE PIC X(6).
               05 T_AUT_DESC    PIC X(30).
               05 T_AUT_MARCA   PIC X(20).
               05 T_AUT_COLOR   PIC X(10).
               05 T_AUT_TAMAÑO  PIC X.
               05 T_AUT_IMPORTE PIC 9(4)V99.
               
       01 TABLA_MARCAS.
           03 DATOS_MARCA OCCURS 301 TIMES
           INDEXED BY IND_MARCAS.
               05 T_NOMBRE_MARCA     PIC X(20) VALUE SPACES.
               05 T_TOTAL_ALQUILERES PIC 9(4) VALUE 0.
               05 MESES OCCURS 12 TIMES.
                   07 VALOR          PIC 9(3) VALUE 0.

       
       01 LINEA_VACIA.
           03 FILLER PIC X(80) VALUE ALL ' '.
                   
       01 ENC_GRAL_LINEA1.
           03 FILLER        PIC X(7) VALUE 'FECHA: '.
           03 ENC_FECHA_DIA PIC 99.
           03 FILLER        PIC X(1) VALUE '/'.
           03 ENC_FECHA_MES PIC 99.
           03 FILLER        PIC X(1) VALUE '/'.
           03 FILLER        PIC X(2) VALUE '20'.
           03 ENC_FECHA_ANO PIC 99.
           03 FILLER        PIC X(54) VALUE ALL ' '.
           03 FILLER        PIC X(6) VALUE 'HOJA: '.
           03 ENC_NUM_HOJA  PIC 999.
       
       01 ENC_GRAL_LINEA2.
           03 FILLER PIC X(20) VALUE ALL ' '.
           03 FILLER PIC X(41) VALUE 
           'LISTADO ESTADISTICO DE ALQUILERES POR MES'.
           03 FILLER PIC X(19) VALUE ALL ' '.
       
       01 ENC_DETALLE_LINEA1.
           03 FILLER PIC X(23)   VALUE 'MARCA                  '.
           03 FILLER PIC X(47) VALUE
           'ENE FEB MAR ABR MAY JUN JUL AGO SEP OCT NOV DIC'.
           03 FILLER PIC X(10)   VALUE '     TOTAL'.
       
       01 ENC_DETALLE_LINEA2.
           03 FILLER PIC X(80) VALUE ALL '-'.
           
       01 LINEA_DETALLE.
           03 NOMBRE_MARCA_DETALLE PIC X(20).
           03 FILLER               PIC X(3) VALUE '   '.
           03 ENERO_DETALLE        PIC 9(3).
           03 FILLER               PIC X(1) VALUE ' '.
           03 FEBRERO_DETALLE      PIC 9(3).
           03 FILLER               PIC X(1) VALUE ' '.
           03 MARZO_DETALLE        PIC 9(3).
           03 FILLER               PIC X(1) VALUE ' '.
           03 ABRIL_DETALLE        PIC 9(3).
           03 FILLER               PIC X(1) VALUE ' '.
           03 MAYO_DETALLE         PIC 9(3).
           03 FILLER               PIC X(1) VALUE ' '.
           03 JUNIO_DETALLE        PIC 9(3).
           03 FILLER               PIC X(1) VALUE ' '.
           03 JULIO_DETALLE        PIC 9(3).
           03 FILLER               PIC X(1) VALUE ' '.
           03 AGOSTO_DETALLE       PIC 9(3).
           03 FILLER               PIC X(1) VALUE ' '.
           03 SEPTIEMBRE_DETALLE   PIC 9(3).
           03 FILLER               PIC X(1) VALUE ' '.
           03 OCTUBRE_DETALLE      PIC 9(3).
           03 FILLER               PIC X(1) VALUE ' '.
           03 NOVIEMBRE_DETALLE    PIC 9(3).
           03 FILLER               PIC X(1) VALUE ' '.
           03 DICIEMBRE_DETALLE    PIC 9(3).
           03 FILLER               PIC X(5) VALUE '     '.
           03 TOTAL_DETALLE        PIC 9(4).
           03 FILLER               PIC X(1) VALUE ' '.

       
       PROCEDURE DIVISION.
           PERFORM 1000_ABRO_ARCHIVOS.
           PERFORM 1100_INICO_VARIABLES.
           PERFORM 1200_LEO_AUTOS.
           PERFORM 1300_PROCESO_AUTOS UNTIL EOF_AUTOS OR 
           SUB_TABLA_AUTOS > 300.                                       
           PERFORM 1400_LEO_ALQUILERES.
           PERFORM 1500_PROCESO_ALQUILERES UNTIL EOF_ALQUILERES.
           PERFORM 1600_IMPRIMO_ENCABEZADO.
           PERFORM 1700_IMPRIMO_TABLA UNTIL I > CANTIDAD_MARCAS.
           PERFORM 1800_IMPRIMO_TOTALES.
           PERFORM 1900_CIERRO_ARCHIVOS.
       STOP RUN.        
       1000_ABRO_ARCHIVOS.
           OPEN OUTPUT ARCH_LISTADO.
           IF  NOT OK_LISTADO
               DISPLAY 'ERROR AL ABRIR EL ARCHIVO LISTADO'
               STOP RUN.
           OPEN INPUT ARCH_ALQUILERES.
           IF  NOT OK_ALQUILERES  
               DISPLAY 'ERROR AL ABRIR EL ARCHIVO ALQUILERES'
               STOP RUN.
           OPEN INPUT ARCH_AUTOS.
           IF  NOT OK_AUTOS
               DISPLAY 'ERROR AL ABRIR EL ARCHIVO AUTOS'
               STOP RUN.
        
       
       1100_INICO_VARIABLES.
           MOVE 0    TO NUMERO_HOJA.
           MOVE 0    TO CANTIDAD_MARCAS.
           MOVE 1    TO I.
           MOVE 1    TO SUB_TABLA_AUTOS.
           MOVE 0    TO CANTIDAD_LINEAS.
           
       1200_LEO_AUTOS.
           READ ARCH_AUTOS.
           IF (NOT OK_AUTOS AND NOT EOF_AUTOS)
               DISPLAY 'ERROR AL LEER EL ARCHIVO AUTOS'
               STOP RUN.
       
       1300_PROCESO_AUTOS.
           MOVE AUT_PATENTE TO T_AUT_PATENTE(SUB_TABLA_AUTOS).
           MOVE AUT_DESC    TO T_AUT_DESC(SUB_TABLA_AUTOS).
           MOVE AUT_MARCA   TO T_AUT_MARCA(SUB_TABLA_AUTOS).
           MOVE AUT_COLOR   TO T_AUT_COLOR(SUB_TABLA_AUTOS).
           MOVE AUT_TAMAÑO  TO T_AUT_TAMAÑO(SUB_TABLA_AUTOS).
           MOVE AUT_IMPORTE TO T_AUT_IMPORTE(SUB_TABLA_AUTOS).
           ADD 1 TO SUB_TABLA_AUTOS.
           PERFORM 1200_LEO_AUTOS.
       
       
       1400_LEO_ALQUILERES.
           READ ARCH_ALQUILERES.
           IF (NOT OK_ALQUILERES AND NOT EOF_ALQUILERES)
               DISPLAY 'ERROR AL LEER EL ARCHIVO ALQUILERES'
               STOP RUN.
       
       1500_PROCESO_ALQUILERES.
           SET IND_AUTOS TO 1.
           SEARCH DATOS_AUTO
               AT END PERFORM 1510_PATENTE_INEXISTENTE
               WHEN(T_AUT_PATENTE(IND_AUTOS) = ALQ_PATENTE)
                   PERFORM 1520_BUSCO_MARCA.
       
       1510_PATENTE_INEXISTENTE.
           DISPLAY 'LA PATENTE: ', ALQ_PATENTE, 'NO EXISTE'.
           STOP RUN.
       
       1520_BUSCO_MARCA.
           SET IND_MARCAS TO 1.
           SEARCH DATOS_MARCA
               AT END PERFORM 1530_MARCA_INEXISTENTE
               WHEN(T_NOMBRE_MARCA(IND_MARCAS) = T_AUT_MARCA(IND_AUTOS))
                   PERFORM 1540_ACTUALIZO_TABLAS UNTIL
                       EOF_ALQUILERES OR 
                       ALQ_PATENTE NOT = T_AUT_PATENTE
                       (IND_AUTOS).  
                   
       1530_MARCA_INEXISTENTE.
           ADD 1 TO CANTIDAD_MARCAS.
           SET IND_MARCAS TO CANTIDAD_MARCAS.
           MOVE T_AUT_MARCA(IND_AUTOS) TO T_NOMBRE_MARCA(IND_MARCAS).
           PERFORM 1540_ACTUALIZO_TABLAS UNTIL 
               EOF_ALQUILERES OR 
               ALQ_PATENTE NOT = T_AUT_PATENTE(IND_AUTOS).
       
       1540_ACTUALIZO_TABLAS.
           ADD 1 TO VALOR(IND_MARCAS, ALQ_FECHA_MES).
           ADD 1 TO T_TOTAL_ALQUILERES(IND_MARCAS).
           ADD 1 TO T_TOTAL_ALQUILERES(301).
           ADD 1 TO VALOR(301, ALQ_FECHA_MES).
           PERFORM 1400_LEO_ALQUILERES.
           
       1600_IMPRIMO_ENCABEZADO.
           MOVE 4 TO CANTIDAD_LINEAS.
           ADD  1 TO NUMERO_HOJA.
           MOVE NUMERO_HOJA TO ENC_NUM_HOJA.
           ACCEPT WX-FECHA FROM DATE.
           MOVE  WX-FECHA(1:2) TO ENC_FECHA_ANO.
           MOVE  WX-FECHA(3:2) TO ENC_FECHA_MES.
           MOVE  WX-FECHA(5:2) TO ENC_FECHA_DIA.                         
           WRITE LINEA_LISTADO FROM ENC_GRAL_LINEA1.
           WRITE LINEA_LISTADO FROM ENC_GRAL_LINEA2.
           WRITE LINEA_LISTADO FROM ENC_DETALLE_LINEA1.
           WRITE LINEA_LISTADO FROM ENC_DETALLE_LINEA2.
       
       1700_IMPRIMO_TABLA.
           ADD 1 TO CANTIDAD_LINEAS.
           IF CANTIDAD_LINEAS > 60 PERFORM 1600_IMPRIMO_ENCABEZADO.
           MOVE T_NOMBRE_MARCA(I) TO NOMBRE_MARCA_DETALLE.
           MOVE VALOR(I, 1)  TO ENERO_DETALLE.
           MOVE VALOR(I, 2)  TO FEBRERO_DETALLE.
           MOVE VALOR(I, 3)  TO MARZO_DETALLE.
           MOVE VALOR(I, 4)  TO ABRIL_DETALLE.
           MOVE VALOR(I, 5)  TO MAYO_DETALLE.
           MOVE VALOR(I, 6)  TO JUNIO_DETALLE.
           MOVE VALOR(I, 7)  TO JULIO_DETALLE.
           MOVE VALOR(I, 8)  TO AGOSTO_DETALLE.
           MOVE VALOR(I, 9)  TO SEPTIEMBRE_DETALLE.
           MOVE VALOR(I, 10) TO OCTUBRE_DETALLE.
           MOVE VALOR(I, 11) TO NOVIEMBRE_DETALLE.
           MOVE VALOR(I, 12) TO DICIEMBRE_DETALLE.
           MOVE T_TOTAL_ALQUILERES(I) TO TOTAL_DETALLE.
           WRITE LINEA_LISTADO FROM LINEA_DETALLE.
           ADD 1 TO I.
       
       1800_IMPRIMO_TOTALES.
           MOVE 'TOTALES' TO NOMBRE_MARCA_DETALLE.
           MOVE VALOR(301, 1)  TO ENERO_DETALLE.
           MOVE VALOR(301, 2)  TO FEBRERO_DETALLE.
           MOVE VALOR(301, 3)  TO MARZO_DETALLE.
           MOVE VALOR(301, 4)  TO ABRIL_DETALLE.
           MOVE VALOR(301, 5)  TO MAYO_DETALLE.
           MOVE VALOR(301, 6)  TO JUNIO_DETALLE.
           MOVE VALOR(301, 7)  TO JULIO_DETALLE.
           MOVE VALOR(301, 8)  TO AGOSTO_DETALLE.
           MOVE VALOR(301, 9)  TO SEPTIEMBRE_DETALLE.
           MOVE VALOR(301, 10) TO OCTUBRE_DETALLE.
           MOVE VALOR(301, 11) TO NOVIEMBRE_DETALLE.
           MOVE VALOR(301, 12) TO DICIEMBRE_DETALLE.
           MOVE T_TOTAL_ALQUILERES(301) TO TOTAL_DETALLE.
           WRITE LINEA_LISTADO FROM LINEA_DETALLE.
       
       1900_CIERRO_ARCHIVOS.
           CLOSE ARCH_LISTADO.
           CLOSE ARCH_ALQUILERES.
           CLOSE ARCH_AUTOS.
           DISPLAY 'FIN DE PROGRAMA'.
           
       end program TP1_B.
